home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / games / spassion / source.lzh / SOURCE / FuncEnemy / ZAKO00.C < prev    next >
Text File  |  2000-03-20  |  3KB  |  138 lines

  1.  
  2. /*
  3. #include <stdio.h>
  4. #include <iocslib.h>
  5. */
  6. /*とりあえずサイン波的な動き*/
  7. #include <xsp2lib.h>
  8. #include "../SPASSION.H"
  9. #include "../player.h"
  10. #include "../enemy.h"
  11. #include "../eshot.h"
  12. #include "../effect.h"
  13. #include "../priority.h"
  14. #include "../sound.h"
  15. #include "../entry.h"
  16. #include "../SUB.H"
  17. #ifndef NULL
  18. #define NULL ((void *) 0)
  19. #endif
  20.  
  21. #define P_X    (*((short *) (&player[0].lx)))    /*lxの上位ワード*/
  22. #define P_Y    (*((short *) (&player[0].ly)))    /*lyの上位ワード*/
  23.  
  24. #define PALET_MAIN    0x0500
  25.  
  26. short enemy_explode( ENEMY *ene );
  27. static short MoveEnemyZako00(ENEMY *);
  28. /*static void TiniEnemyZako00(ENEMY *);*/
  29.  
  30. #define PT_ST    0
  31. #define PT_END    0+7
  32.  
  33. /* 16x16キャラの当たり判定 */
  34. HIT_XY4    hit8_p={-8,-8,8,8};
  35. HIT_XY4    hit8_o={-8,-8,8,8};
  36. HIT_XY4    hit8_s={-8,-8,8,8};
  37.  
  38. void InitEnemyZako00Hit( void )
  39. {
  40.     hit8_p.x1-=PLAYER_HIT_X;hit8_p.y1-=PLAYER_HIT_Y;
  41.     hit8_p.x2+=PLAYER_HIT_X;hit8_p.y2+=PLAYER_HIT_Y;
  42.     hit8_o.x1-=OPTION_HIT_X;hit8_o.y1-=OPTION_HIT_Y;
  43.     hit8_o.x2+=OPTION_HIT_X;hit8_o.y2+=OPTION_HIT_Y;
  44. }
  45.  
  46. void InitEnemyZako00(ENEMY *ene)
  47. {
  48.     ene->info         = PALET_MAIN | PRIORITY_ZAKO;
  49.     ene->vx             = -2 * 65536;
  50.     ene->vy             = 0;
  51.     ene->hit_p[0]     = &hit8_p;ene->hit_p[1]=NULL;
  52.     ene->hit_o[0]     = &hit8_o;ene->hit_o[1]=NULL;
  53.     ene->hit_s[0]     = &hit8_s;ene->hit_s[1]=NULL;
  54.     ene->hp             = 1;
  55.     ene->angle         = 0;
  56.     ene->no_dead     = 0;
  57.     ene->func_enemy_move = MoveEnemyZako00;
  58. /*    ene->func_enemy_tini = TiniEnemyZako00;*/
  59.  
  60. /*    entry_counter_stop = !0;*/        /* エントリーカウンター停止 */
  61. }
  62.  
  63.  
  64. static short MoveEnemyZako00( ENEMY *ene )
  65. {
  66.     unsigned char angle;
  67.  
  68.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  69.     ene->x = ((ene->lx += ene->vx) >> 16)-8;    /*-8は表示位置をずらすため*/
  70.     ene->y = ((ene->ly += ene->vy) >> 16)-8;
  71.  
  72.     ene->angle=(ene->angle+4)&255;
  73.     ene->vy=vy_tbl[15][ene->angle];
  74.     ene->pt = obj_zako+PT_ST+(ene->anim_count++)/4;
  75.     if( ene->pt > obj_zako+PT_END ){
  76.         ene->pt = obj_zako+PT_ST;
  77.         ene->anim_count=0;
  78.     }
  79. /*    ene->hit_p=&hit1_p[anim_num];*/
  80.     /* ばらまき弾 */
  81.     switch (ene->state){
  82.     case 0:
  83.         if(ENE_X < 128){
  84.             switch ( level ){
  85.             case EASY:
  86.                 break;
  87.             case NOMAL:
  88.                 MakeEShot(ESHOT_ENG01, ENE_X, ENE_Y, 5, calc_direction( ENE_X, ENE_Y, P_X+CENTER_X, P_Y ), 4,0,ene);
  89.                 SetSE(SE_ESHOT_ENRG);    /* 敵ショット音 */
  90.                 break;
  91.             case HARD:
  92.                 angle=calc_direction( ENE_X, ENE_Y, P_X+CENTER_X, P_Y );
  93.                 MakeEShot(ESHOT_ENG01, ENE_X, ENE_Y, 5, (angle-12)&255, 4,0,ene);
  94.                 MakeEShot(ESHOT_ENG01, ENE_X, ENE_Y, 5, (angle+12)&255, 4,0,ene);
  95.                 SetSE(SE_ESHOT_ENRG);    /* 敵ショット音 */
  96.                 break;
  97.             }
  98.             ene->state++;
  99.         }
  100.         break;
  101.     case 1:
  102.         /* 画面外に出たら消去 */
  103. /*        if(ENE_X < 128){
  104.             ene->lx = 128*65536;
  105.             ene->ly = 192*65536;
  106.             ene->vx = 0;
  107.             ene->vy = 0;
  108.         }
  109.             if( BITSNS(0x04) & BIT(1) ){
  110.                 while( BITSNS(0x04) & BIT(1) );
  111.                 entry_counter_stop = 0;
  112.                 return (0);
  113.             }
  114. */
  115.         if( ENE_X < 16 - 8 )
  116.             return (0);
  117.  
  118.     }
  119.  
  120.     /* ダメージを受けた時の処理 */
  121.     if(ene->damage){
  122.         MakeEffect(EFFECT_EXPLMINI, 0, ene->x, ene->y);
  123.         SetSE(SE_EXPL_S);    /* 爆発音 */
  124.         ene->player->score += 1;
  125.         return (0);        /* 消去 */
  126.     }
  127.  
  128.     xsp_set_st(ene);
  129.  
  130.     return(1);
  131. }
  132.  
  133. /*
  134. static void TiniEnemyZako00(ENEMY * p)
  135. {
  136. }
  137. */
  138.